 3.0 (XX XX, 2019)
===================
(LazyLib 2.3 or higher is required for this mod to function!)
Updated to be compatible with Starsector 0.8a+
Completely rewrote the input system and added a custom console overlay:
 - Same system used for both campaign and combat (no more popups or dialogs)
 - Uses custom font renderer (please don't use these classes yourself, wait for
   their eventual inclusion in LazyLib once the code is stable and bug-free)
 - Supports mouse/keyboard scrolling and copy+paste
Console.showMessage() accepts any Object, not just Strings
Most console settings are now chosen in-game, persistent between updates
Memory usage is now shown in console overlay (disable using Settings command)
Sounds are no longer played when a command encounters an error
Fixed control+backspace to delete the current word instead of last word in input
Fixed control+backspace deleting multiple words when using the command separator
Fixed bug where combat devmode shortcuts would run after the console was closed
Fixed tab completion when using the command separator
Tab completion won't include combat-only commands in the campaign and vice versa
Minor update to typo correction, please let me know if it's more/less accurate
If exception stack traces are enabled, show source jars in exception details
Version Checker no longer warns that the Example Commands mod is unsupported
Aliases that execute multiple commands will respect custom command separators:
 - Always use ; to separate commands in aliases.csv; will be replaced at runtime
Added isCampaignAccessible() to CommandContext:
 - Returns true if the player is on the campaign map, in a campaign battle,
   or fighting a refit simulation battle in the campaign
 - Used to check if you have access to campaign-only methods (in SectorAPI, etc)
Removed AddAptitudePoints command (use AddSkillPoints instead)
New commands:
 - AddHullmod, adds the specified modspec to the player's inventory
 - AllHullmods, unlocks all unlearned hullmods
 - BlockRetreat, prevents a full retreat from being ordered by the enemy
 - BugReport, copies basic system information as well as the list of active mods
   and their current versions, so you can paste that information on the forums
 - DebugDialogs, shows all changes to the various memory maps when selecting a
   choice during a rules-based dialog
 - ForceDeployAll, forces your opponent to deploy all reserves in their fleet
   (warning: this command can seriously impact game performance!)
 - GameArgs, shows the command-line arguments used to launch Starsector
 - ModInfo, shows detailed info about a mod, including what ships, fighter
   wings, weapons and commodities it adds to the game
 - SetCommission, sets the faction the player is commissioned to work for, or
   ends the current commission if "none" is entered as an argument
 - Settings:
   - Allows you to change console settings in-game
   - Entering "reset" as an argument restores console settings to their defaults
     (only takes effect after closing and re-opening the game)
 - ShowAI, shows the target and maneuver target of every ship on the battle map
 - SpawnAsteroids, allows you to spawn asteroids on the battle map
   - Click and drag to set velocity
   - Press 6-0 to cycle between asteroid sizes
   - Press spacebar to return to regular gameplay
Changes to existing commands:
 - All AddX commands will no longer allow you to drop into negative quantities
 - AddCrew:
   - No longer accepts a crew XP level argument
   - Using this command without arguments gives as many crew as your fleet can
     hold (in the past this only gave up to the skeleton crew requirement)
 - AddOfficer:
   - Added support for Reckless officers
   - Now allows custom officer names. Updated syntax: AddOfficer
     [optionalPersonality] [optionalLevel] [optionalFaction] [optionalName]
 - AddOrdnancePoints will grant a percentage bonus instead of flat if the
   argument ends with %
 - AddShip will redirect to AddWing if a wing ID is entered
 - AddSkillPoints:
   - Now adds character points, used for both skills and aptitudes
   - Fix for negative point amounts wrongly adding skill points
 - AddWing and AllWings properly add LPCs instead of fleet members
 - AddXP will cap XP at what's needed for the maximum character level
 - FindItem/FindShip:
   - Wings have been moved to FindItem (as they are now bought as LPCs)
   - Both commands will simulate a visit from the player to each searched
     submarket; this ensures the searched stockpiles are always up to date, at
     the expense of the command taking ~1 second to execute the first time
   - Results are sorted by distance to the market
   - Added proper formatting to prices and amount available
   - Fixed an issue with 100k+ stacks where the reported amount was way too low
   - Made it more clear when you enter an invalid ID versus when no goods are
     available in any market
 - GoTo:
   - Will redirect to the Jump command if a star system's name is entered
   - Teleports you to your move destination if no argument is entered
 - Help:
   - Gives some additional information on advanced console features such as tab
     completion and command chaining
   - Won't show combat-only commands when used in the campaign, and vice versa
 - Kill and Nuke credit kills to the player flagship
 - List accepts several new arguments:
   - "hullmods", shows all hullmods that can be unlocked with a modspec item
   - "mods", shows all currently enabled mods
   - "commands", lists all loaded commands (use "status detailed" for more info)
   - "aliases", shows all aliases added through aliases.csv
   - "macros", shows all macros usable within the RunCode command
   - "tags", shows all tags and their associated commands
 - NoCooldown negates cooldown entirely (previously set cooldown to 0.1 seconds)
 - Respec should properly reset skill-granted bonuses
 - ShowBounds:
   - Uses own bounds renderer instead of Starsector's built-in debug one
     (this means no more giant green/white squares on ships)
   - Fighter bays are now shown as purple diamonds
   - Don't show shield radius/targeting ellipse for ship pieces
 - SpawnFleet:
   - Updated to use FleetFactoryV2; mostly matches vanilla fleet compositions
     now (spawned fleets are of fleet type "large patrol")
   - No longer accepts crew XP level or quality arguments. Updated syntax:
     SpawnFleet <factionId> <totalFP> [optionalName]
   - Still needs some tweaking for officer numbers and levels
 - Status:
   - Removed "detailed" argument; now always provides maximum detail
 - Storage:
   - Now opens immediately after closing the overlay rather than waiting for you
     to unpause the game
   - Entering the argument "clear" will delete all items in storage, and "clear
     ships" will delete all stored ships
 - Traitor works properly when used on drones
... plus a ridiculous amount of polish on nearly everything


--------------------------------------------------------------------------------


 2.7b (March 16, 2017)
=======================
Switched version file hosting to Bitbucket

 2.7 (December 16, 2015)
=========================
Newlines (\n) in a command's 'help' column are displayed correctly
Exception stack traces are no longer shown by default
Added "showExceptionDetails" to console_settings.json
Updated the custom command tutorial in the base folder
Changes to existing commands:
 - AddCrew without a quantity will add all needed skeleton crew to your fleet
 - AddFuel without a quantity will top off your fleet's fuel tanks
 - AddShip: fixed regression that allowed you to spawn single fighters again
 - AddSupplies without a quantity will fill half the player cargo with supplies
   (won't go over cargo capacity, won't go over 50% total cargo as supplies)
 - AllHulls and AllWings won't cause an error if used in a total conversion
   that lacks an unlocked storage tab
 - FindItem/FindShip list goods in free transfer submarkets last (useful for
   reminding yourself which storage tab you left a specific ship/weapon in)
   Note: due to API limitations this does not include anything in storage in the
   Abandoned Terraforming Platform or any other market that doesn't participate
   in the economy!
 - ForceMarketUpdate actually forces a market refresh each time you use it
   (previously only refreshed stock if the market would have done so on a visit)
 - InfiniteAmmo also applies to ship systems that have limited uses
 - Kill works on the campaign map, destroys any fleet you click on until you
   press escape or enter a menu (kills are not credited to the player)
 - List accepts a second argument, used to filter out any IDs that don't start
   with that argument (ex: "list variants exi_" will show all Exigency variants,
   "list variants hound" will show all hound and hound subskin variants)
 - Traitor affects guided missiles fired by that ship (no more targeting itself)

 2.6b (December 04, 2015)
==========================
Changes to existing commands:
 - AllWings won't add any wings that already exist in the target's cargo
 - SpawnFleet gives an actually playable ratio of officers:
   Adds 1 officer per 8 combat-ready ships (minimum 2, maximum 15 officers)
 - SpawnFleet ensures massive fleets aren't spawned touching the player fleet

 2.6 (December 03, 2015)
=========================
Console output in combat uses combat messages instead of floating text
CommandUtils findBestXMatch() checks IDs before names (fixes Nexerelin issue)
New features:
 - Command tab completion. Press tab to cycle through all matches for the
   current command from the cursor onwards, shift+tab to reverse order
   (does not work for arguments, available in the campaign input dialog only)
New commands:
 - AddOfficer, adds a skilled officer to the player fleet
 - Hide, makes the player fleet invisible to other fleets
 - OpenMarket, opens any market's interaction dialog from any system
 - RemoveHulks, destroys all hulks on the battle map
Changes to existing commands:
 - AddShip uses list of all variants added to the API in 0.7a, doesn't care
   about miscapitalizations in variant IDs (requires 0.7a-RC10 hotfix)
 - AllHulls won't add any hulls that already exist in the target's cargo
 - AllWeapons gives up to 1,000 of each weapon (used to give 10)
 - Jump positions the player fleet a safe distance away from the system's star
 - Jumps to hyperspace in systems without a hyperspace anchor will teleport you
   to the center of hyperspace as a fallback
 - List accepts arguments "planets" and "variants" (VERY spammy), "markets" now
   shows the location, owning faction, and their relationship with the player
 - Respec properly refunds aptitude points again
 - Reveal works on the campaign map, maximizes sensor range and strength
   (both have a hard cap, so revealing the entire map isn't feasible)
 - AdjustRelationship/SetRelationship changes:
   - Renamed to AdjustRelation/SetRelation
   - If a non-existent faction is entered, show list of valid faction IDs
   - Show both name and ID of affected factions (formerly only showed names)
   - If only one faction is entered, use player's current faction as the target
   - If "all" is entered as argument, changes relation with all other factions
   - RepLevels are allowed as an argument ("friendly", "hostile", etc)
 - SpawnFleet adds officers to the created fleet, levels based on quality factor
   (note: SpawnFleet no longer matches vanilla fleet compositions post-0.7a)
 - SpawnFleet properly sorts fleet members of created fleets
New aliases:
 - ar -> AdjustRelation
 - sr -> SetRelation

 2.5 (November 19, 2015)
=========================
Updated to be compatible with Starsector 0.7a
Updated custom command template with more examples + documentation
Changed some constants in CommonStrings, shouldn't affect any custom commands
Removed AddLogistics command (logistics no longer exists in current version)
New commands:
 - Clear, clears the text from the campaign pop-up
 - Flameout, disables all engines of current target
 - Rout, forces the enemy side into a full retreat
Changes to existing commands:
 - AddShip won't let you spawn fighter wings as ships anymore
 - AdjustRelationship and SetRelationship typo correction work properly now
 - InfiniteCR stops the CR timer from counting down, doesn't prevent bonuses
   from raising your current CR above the ship's maximum
 - ShowBounds optimized, doesn't draw in menus, also shows new elliptical target
   radius used by AI since 0.65.2a
 - SpawnFleet ensures there is at least 150 su of space between the player and
   the new fleet, pings the new fleet to show its position
 - SpawnFleet supports typo correction for faction argument
 - Added optional crew level argument to SpawnFleet command, made quality
   optional as well; syntax is now "spawnfleet <faction> <totalFleetPoints>
   [optionalQuality] [optionalCrewLevel] [optionalFleetName]"
   Examples of valid syntax:
    "spawnfleet hegemony 150"
    "spawnfleet hegemony 150 0.6"
    "spawnfleet hegemony 150 0.6 veteran"
    "spawnfleet hegemony 150 0.6 veteran System Defense Fleet"
 - Storage searches all markets for an unlocked storage tab, not just stations
 - Suicide works on the campaign map, destroys your entire fleet
 - Traitor swaps side of all members of a fighter wing
 - Traitor also affects any drones currently deployed by the selected ship
Greatly expanded the bundled Example Mod-Added Commands mini-mod:
 - This can be found in a zip in the main folder and contains sample
   implementations of some simple commands (mostly jokes)
 - Echo, the most basic example. Just prints the entered text to the console.
 - DogPile, causes all hostile fleets in the system to attempt to intercept
   the player
 - FlipShips, flips all ships on the battle map 180 degrees
 - FlakJacket, causes a constant circle of flak to rain around your flagship
 - ForeverAlone, prevents you from touching other fleets and vice versa

 2.4b (March 08, 2015)
=======================
Fixed crash when entering aliases in mixed case
New command:
 - ForceMarketUpdate, forces an inventory refresh of all submarkets in the
   sector. Equivalent to opening each submarket tab at every market
Changes to existing commands:
 - FindItem now shows the local prices and legality of commodities and weapons
 - FindShip now shows the local prices and legality of ships and wings

 2.4 (March 06, 2015)
======================
The keystroke to summon the console is now shown when you first load a game
Combat output is now centered on the top of the screen, not the player ship
Added isInCampaign()/isInCombat() to CommandContext enum
Added alias support, aliases are defined in data/console/aliases.csv
Default aliases:
 - aap -> AddAptitudePoints
 - acp -> AddCommandPoints
 - aop -> AddOrdnancePoints
 - asp -> AddSkillPoints
 - ia -> InfiniteAmmo
 - if -> InfiniteFlux
 - nc -> NoCooldown
New commands:
 - AddLogistics, modifies the maximum logistics of the player fleet
 - AddOrdnancePoints, modifies the max OP for all ships in player fleet
 - AllCommodities, adds all trade items to the specified station/player cargo
 - FindItem, lists all markets that sell a resource or weapon and their
   location/faction
 - FindShip, lists all markets that sell that ship and their location/faction
 - InfiniteFuel, prevents fuel from draining in hyperspace
 - InfiniteSupplies, prevents supplies from draining while flying
 - Respec, resets player skills/aptitudes to 0 and refunds all spent points
 - ToggleAI, disables or re-enables the AI of the targeted ship
 - Traitor, toggles the side of the targeted ship
Changes to existing commands:
 - AddWeapon can add built-in and system weapons to your inventory again
 - AllHulls, AllWings and AllWeapons work with stations as an argument again
 - AllHulls and AllWings also work with 'player' as the argument again
 - Kill works on targets that have god mode active
 - Reload now reloads settings, commands, tags, aliases, and RunCode's
   imports and macros
 - Repair won't lower your CR on the campaign map if it was over the maximum
 - SpawnFleet re-added, syntax is now "spawnfleet <faction> <totalFP> <quality>
 - Status includes aliases (plus their definitions with "detailed" argument)
 - Storage will now use the first station with an unlocked storage tab if
   there are no abandoned stations in the sector (total conversion support)
 - Added getStorageStation() to Storage command's script

 2.3 (December 22, 2014)
=========================
Made campaign input popup capable of recovering from certain errors
New commands:
 - Kill, destroys your ship's current target
 - Suicide, destroys the currently piloted ship
Changes to existing commands:
 - Fixed shield center offset with ShowBounds

 2.2 (November 18, 2014)
=========================
Console popup will now expand to take up the entire screen in the campaign
Added typo correction - most commands will find the best match for invalid IDs
Added "typoCorrectionThreshold" to data/console/console_settings.json
Added positional editing to the campaign input dialog
Fixed campaign commands being usable in the simulator
New commands:
 - Added EndCombat command, takes the victorious side as an optional argument
 - Re-added Storage command, redirects to the Abandoned Terraforming Platform,
   or in total conversions the first station it can find with the "abandoned"
   market condition (if you used AllHulls or AllWeapons in a prior version,
   those items will be transferred over to the station's storage when you next
   use this command)
Changes to existing commands:
 - Typo correction added to the following commands: AddItem, AddWeapon,
   AdjustRelationship, AllHulls, AllWeapons, AllWings, GoTo, Jump, SetHome,
   SetRelationship
 - Added several more default RunCode macros

 2.1b (November 13, 2014)
==========================
Added List command, shows valid IDs for ships/wings/systems/weapons/factions/etc

 2.1 (November 12, 2014)
=========================
Fixed crash when commands that summon a dialog have an error in said dialog
Console now defaults to showing entered commands (and logging them as well)
Up now re-enters the previously entered command (down to undo, campaign only)
Removed shift+backspace deleting entire line (too easy to hit by accident)
Lots of minor tweaks and polishing
Changes to existing commands:
 - Temporarily removed Storage command (broken since .65a added markets)
 - AddItem and AddWeapon no longer spam a stack trace when an invalid ID is
   entered
 - AdjustRelationship and SetRelationship now properly use -100 to 100 range
 - GoTo works with token ids as well as names (ex: corvus_pirate_station)
 - Fixed Home not teleporting player fleet if your home isn't in the same
   system, now moves your fleet to the containing location first
 - Fixed SetHome not working with stations after vanilla switched to custom
   entities in .65a, also works with comm relays now
 - ShowBounds now also shows collision and shield radii (grey/blue respectively)
 - RunCode supports macros, see data/console/runcode_macros.csv
 - Fixed Reload failing if RunCode was used this session

 2.0 (who knows, I released it like eight times without incrementing version #)
================================================================================
(this version is not save compatible with earlier versions)
LazyLib is required for this mod to function!
The console is now summoned with control+backspace
 - This and other settings can be changed in data/console/console_settings.json
Total rewrite of the mod:
 - Core is no longer multi-threaded (fixes a load of problems the old mod had)
 - Utility mod, can be toggled at will, works with total conversions
 - Campaign input is handled through an interaction dialog, works in fullscreen
   (combat input still requires a popup and thus playing in windowed mode)
Made writing custom commands much simpler:
 - Existing custom commands will no longer work, will need to be rewritten
 - Commands must implement the org.lazywizard.console.BaseCommand interface
 - Commands are registered inside data/console/console_commands.csv
 - Commands can be in any package now, not just data.scripts.console
   (it is recommended that you DON'T put them in data/scripts, otherwise
    the game will try to load them even when the console mod isn't active)
 - A basic tutorial on writing custom commands is included in the mod folder
New commands:
 - AllHulls, adds one of each hull to a station's inventory
 - AllWings, adds one of each fighter wing to a station's inventory
 - Find, gives name and location of all entities in the campaign whose
   name contains the given arguments
 - Jump, teleports your fleet to another star system or hyperspace
 - InfiniteCR, prevents CR from draining during combat
 - Reload, reloads all console commands and settings
 - Repair, repairs hull/armor/cr of all ships in your fleet (in campaign),
   or hull/armor damage of all your currently fighting ships (in combat)
 - ShowBounds, toggles bounds rendering of all ships in combat
 - ShowLoc, shows coordinates of player ship/fleet in combat/campaign
 - SourceOf, shows what mod a specific command came from
 - Storage, opens a persistent, infinite-stack cargo/fleet container
Changes to existing commands:
 - Ported all old commands to the new BaseCommand interface
 - There are no more hard-coded commands - you can overwrite any core command
 - AllWeapons now defaults to 'storage' instead of player cargo if no
   arguments are passed in, won't go beyond 10 of each weapon
 - Home can now teleport your fleet between starsystems
 - RunCode catches all Exceptions so you don't need to squeeze a try-catch
   block into your arguments anymore
 - RunCode's imports are customizable, set in data/console/runcode_imports.csv
Removed the following old commands:
 - AddConsole, as the new ModPlugin system makes it unnecessary
 - GC, anyone who knows enough Java to know what this does and when to use it
   could easily do the same thing via RunCode
 - RunScript, it became superfluous after RunCode was implemented


--------------------------------------------------------------------------------


 1.6b (September 18, 2013)
===========================
Fixed bug where NoCooldown prevented projectile weapons from firing in .6a

 1.6 (July 30, 2013)
=====================
Console popup now shows console output
Console.showError() shows more detail, accepts Throwables
AddWing now only appends '_wing' to its arguments after it fails without it
Improvements to the RunCode command:
 - Added Vector2f to default imports
 - RunCode can now use LazyLib's classes if LazyLib is tagged in the launcher
 - If an exception occurs, actual exception details are shown rather than the
   InvocationTargetException wrapper thrown by Janino's ScriptEvaluator

 1.5 (February 7, 2013)
========================
Toggleable combat commands can now be used on the campaign map
Certain non-combat commands can now be used in battles (Alias, GC, RunCode, etc)
You can now copy your console settings to a new savefile:
 (this process will be improved in future versions)
 - Step 1: start a new game without this mod active, save and quit
 - Step 2: activate this mod, load the save with the settings you want
 - Step 3: without exiting the game, load the new save from step 1
 - Step 4: use the AddConsole command to activate the console on that save

 1.4 (January 17, 2012)
========================
The cursor for the console pop-up is now visible
Fixed bug: exception details not displayed when an error occurs
RunCode works again (ignores separators, can't be used with other commands)
Multiple changes to the alias command:
 - More detail is given when the command fails
 - Fixed several bugs that prevented aliases with multiple commands from working
 - Fixed bug: could alias alias and cause an infinite loop

 1.3 (January 14, 2012)
========================
You can now add the console to an existing save with 'addconsole'
Mod info page now has more information to help beginners with this mod
Godmode no longer fails with systems that increase ships' vulnerability
New campaign command: AddXP <amount> - adds experience to your character
New in-battle command: Nuke - destroys all enemies on the battle map
Added missing text to AddAptitudePoints and AddSkillPoints

 1.2 (January 12, 2012)
========================
Fixed crash when using invincibility cheats
Fixed position of in-battle messages when using large ships

 1.1 (January 11, 2012)
========================
Fixed bug where the console occasionally stopped working during a campaign
Generator is more aggressive about activating itself in total conversions
In-battle message support added, displayed underneath player ship
In-battle commands are no longer reset after each battle
Active in-battle commands are listed at the start of combat and when toggled
Removed Unreveal command, Reveal is now a toggle
New in-battle commands:
 - God: Invincibility (somewhat buggy - heavy damage will instantly drop you to
   zero hull but you won't die, and you get a null crash when ramming ships)
 - InfiniteFlux: Gives all ships on your side infinite flux

 1.0 (November 24, 2012)
=========================
MASSIVE changes made to the code base for this release - please report any bugs!
New features:
 - The console can now be used in combat (limited list of supported commands)
 - Multi-threaded input: can enter commands when the game is paused/in menus
 - Full mission support (load a campaign save first to use your custom settings)
 - You can now issue multiple commands at once (separate them with a semicolon)
 - Should work out of the box with all mods that don't replace generators.csv
New campaign commands:
 - AddAptitudePoints: adds aptitude points to your character
 - AddSkillPoints: adds skill points to your character
 - Alias: allows you to create nicknames for existing commands
 - RunCode: compiles and runs a line of Java code (uses Janino)
New in-battle commands:
 - AddCommandPoints: modifies available command points
 - InfiniteAmmo: toggles infinite ammo for your side
 - NoCooldown: toggles cooldown for all weapons on your side
 - Reveal/Unreveal: reveals/unreveals the entire battle map
Modder-specific changes:
 - Changed how commands are handled, uses reflection instead of being hard-coded
 - ConsoleManager has been removed and merged with data.scripts.console.Console
 - User-made/mod-specific commands can now be registered with the console
 - Most code is now stored in jars/SFConsole.jar - source is included in the jar
 - Console variable storage/retrieval is now type-safe
 - Added protected Class getVarType(String varName) to Console and BaseCommand
 - Added basic documentation - see JavaDoc.zip in the main folder

 0.4b beta (October 21, 2012)
==============================
Fixed null-pointer exception with mods that have a custom star system
Added built-in support for Project CAELUS, Project Ironclads, Fight for
 Universe: Sector Xplo, and Ascendency.

 0.4 beta (September 30, 2012)
===============================
Completely rewrote AddShip:
 - less strict about capitalization (tries again with different case)
 - specifying a ship type without a variant will spawn an empty hull
The various Add<X> commands will accept their arguments in any order
Added syntax and usage help for all commands
Removed showMultiLineMessage methods, incorporated into showMessage

 0.3 beta (September 19, 2012)
===============================
You can now rebind the console key in-game (to rebind, press Shift+F1)
RunScript's script store is now persistent between reloads
Added the GC command (tells the JVM to run a garbage collection event)
Minor optimization when reloading a saved game
Added Console.setManager() method, should make modding the console easier
Miscellaneous display tweaks

 0.2 beta (September 18, 2012)
===============================
Added missing AddItem command

 0.1 beta (September 17, 2012)
===============================
Initial release, 16 included commands, several features removed to run in .53.1a
